package com.ruoyi.form.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.form.domain.AxModelField;
import com.ruoyi.form.domain.AxField;
import com.ruoyi.form.domain.Element;
import com.ruoyi.form.domain.FieldLayout;

import java.util.List;

/**
 * 【请填写功能名称】Service接口
 *
 * @author ruoyi
 * @date 2025-07-16
 */
public interface IAxFieldService extends IService<AxField> {

    /**
     * 查询【请填写功能名称】
     *
     * @param id 【请填写功能名称】主键
     * @return 【请填写功能名称】
     */
    public AxField selectAxFieldById(String id);

    /**
     * 查询【请填写功能名称】列表
     *
     * @param axField 【请填写功能名称】
     * @return 【请填写功能名称】集合
     */
    public List<AxField> selectAxFieldList(AxField axField);

    /**
     * 新增【请填写功能名称】
     *
     * @param axField 【请填写功能名称】
     * @return 结果
     */
    public int insertAxField(AxField axField);

    /**
     * 修改【请填写功能名称】
     *
     * @param axField 【请填写功能名称】
     * @return 结果
     */
    public int updateAxField(AxField axField);

    /**
     * 批量删除【请填写功能名称】
     *
     * @param ids 需要删除的【请填写功能名称】主键集合
     * @return 结果
     */
    public int deleteAxFieldByIds(String[] ids);

    /**
     * 删除【请填写功能名称】信息
     *
     * @param id 【请填写功能名称】主键
     * @return 结果
     */
    public int deleteAxFieldById(String id);
    /* ---------------------------------------------------分割线--------------------------------------------------------------*/
    /**
     * 判断是否不需要编码的静态filed code
     * @param code 代码
     * @return boolean
     */
    public boolean isStaticCode(String code);
    /**
     * 获取格式化后的属性code
     * @param field field记录
     * @return 编码后代码
     */
    public String getPropertyName(AxField field);
    /**
     * 获取代码
     *
     * @return 代码
     */
    public String getBasicCode();
    /**
     * 获取排序最大值
     *
     * @return 代码
     */
    public Integer getMaxSortNum();

    /**
     * 查询引用属性
     * @param bo 筛选bo
     * @return {@link List<  AxField  >}
     */
    public List<AxField> queryRefAttributelistForModel(AxField bo);

    /**
     * 查询引用属性（选择引用属性时）
     * @param bo 筛选bo
     * @return {@link List<  AxField  >}
     */
    public List<AxField> querySelectRefAttributelist(AxField bo);
    /**
     * 保存引用属性
     * @param bo 业务实体
     * @return {@link Boolean}
     */
    public Boolean insertRefBo(AxField bo);
    /**
     * 查询模型引用属性(表单显示设计器用)
     * @param axField
     * @return {@link List< Element>}
     */
    public List<Element> emlist(AxField axField);
    /**
     * 查询模型引用属性(表单显示设计器用)
     * @param axField
     * @return FieldLayout
     */
    public FieldLayout layoutList(AxField axField);
    /**
     * 查询引用属性
     * @param bo 筛选项
     * @return {@link List<   AxField  >}
     */
    List<AxField> queryRefAttributelist(AxField bo);
    /**
     * 查询引用属性
     * @param tplId 模型id
     * @return {@link List<   AxField  >}
     */
    List<AxField> findFields(String tplId);
    /**
     * 查询复杂属性子属性
     * @param parentId
     * @return
     */
    public List<AxField> queryChildList(String parentId);
    /**
     * 保存表单布局信息
     * @param fieldLayout
     * @param axModelFields
     * @return {@link Boolean}
     */
    Boolean saveLayout(FieldLayout fieldLayout, List<AxModelField> axModelFields);
    /**
     * 删除引用属性
     * @param bo
     * @return {@link Boolean}
     */
    void delRefBo(AxField bo);
}
